import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

plt.rcParams[u'font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

# 准备数据
columns = ['日期', '中国', '美国', '意大利']
datas = [[20200327, 385.00, 189.00, 589.00],
         [20200328, 478.00, 122.00, 1434.00],
         [20200329, 337.00, 1674.00, 646.00],
         [20200330, 288.00, 2200.00, 1590.00],
         [20200331, 190.00, 2045.00, 1109.00],
         [20200401, 195.00, 1524.00, 1118.00],
         [20200402, 175.00, 557.00, 1431.00],
         [20200403, 199.00, 781.00, 1480.00],
         [20200404, 226.00, 4880.00, 1238.00],
         [20200405, 138.00, 2614.00, 819.00]]

# 创建画布
# fig = plt.figure(figsize=(18, 10), dpi=100)
fig, ax = plt.subplots(figsize=(18, 10),
                       dpi=100)  # 按照上面的画布画图，update函数每次运行就会叠在上一次的绘图上，这样动画不流畅；按照这个方法，第一个变量接受画布，第二个变量接受绘图区，下面可以把这个绘图区清空


# 实现动画更新方法
def update(row):
    ax.clear()  # 清空上次的绘图
    ax.barh(columns[1:], row[1:], height=0.5, color=['r', 'g', 'b'])
    ax.text(0.8, 0.3, row[0], transform=ax.transAxes, fontsize=18)  # transform的作用是把绘图区域固定位0到1的区间内，然后文本固定在这一个地方


# 创建动画
animation = FuncAnimation(fig, update, frames=datas, repeat=False)  # 参数：画布，绘图函数，数据，循环播放

plt.show()
